package com.mysiteforme.admin.util;

import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/****
 * 发送微信消息(模板消息)
 * @author jingjing
 *
 */
@Service
public class WX_TemplateMsgUtil {

    @Autowired
    private WX_TokenUtil wX_TokenUtil;
    private static Logger logger = LoggerFactory.getLogger(WX_TemplateMsgUtil.class);

    /**
     * 发送微信消息(模板消息)
     *
     * @param touser    用户 OpenID
     * @param templatId 模板消息ID
     * @param clickurl  URL置空，则在发送后，点击模板消息会进入一个空白页面（ios），或无法点击（android）。
     * @param topcolor  标题颜色
     * @param data      详细内容
     * @return
     */
    public Response<?> sendWechatMsgToUser(String touser, String templatId, String clickurl, String topcolor, JSONObject data) {
        AccessToken accessToken = wX_TokenUtil.getWXToken(touser);
        if (accessToken == null) {
            return ResponseUtils.returnCommonException("微信获取token失败");
        }
        String tmpurl = Constants.MESSAGE_TEMPLATE + "?access_token=" + accessToken.getAccessToken();
        JSONObject json = new JSONObject();
        json.put("touser", touser);
        json.put("template_id", templatId);
        json.put("url", clickurl);
        json.put("topcolor", topcolor);
        json.put("data", data);
        try {
            JSONObject result = WX_HttpsUtil.httpsRequest(tmpurl, "POST", json.toString());
            JSONObject resultJson = new JSONObject(result);
            Integer errcode = (Integer) resultJson.get("errcode");
            logger.info("errcode" + errcode);
            if (errcode != null) {
                if (errcode == 43004) {
                    return ResponseUtils.returnCommonException("用户未关注本公众号");
                }
                if (errcode == 40001) {
                    return ResponseUtils.returnCommonException("微信获取token失败");
                }
                String errmsg = (String) resultJson.get("errmsg");
                if (!"ok".equals(errmsg)) {  //如果为errmsg为ok，则代表发送成功，公众号推送信息给用户了。
                    return ResponseUtils.returnCommonException("消息推送失败");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseUtils.returnCommonException("消息推送失败");
        }
        return ResponseUtils.returnObjectSuccess(true);
    }

}
